SNA Descritive Analysis from “Projeto Redes de Atenção às pessoas que consomem álcool e outras Drogas em Juiz de Fora-MG Brazil” - SNArRDJF

Here you can find a basic script to analysis data from SNArRDJF - this script was elaborated considering its use for orther matrix adjacency data from SNArRDJF - Here we are going to analyse:

1 28_ACESSO

########################## Basic Preparation ##### `#########################

2 Loading objects generated with previous script

rm(list = ls()) # removing previous objects to be sure that we don't have objects conflicts name
load("~/SNArRDJF/Robject/acesso_data.RData")

2.1 Reload packages

suppressMessages(library(RColorBrewer))
#suppressMessages(library(car))
#suppressMessages(library(xtable))
suppressMessages(library(igraph))
#suppressMessages(library(miniCRAN))
#suppressMessages(library(magrittr))
#suppressMessages(library(keyplayer))
suppressMessages(library(dplyr))
#suppressMessages(library(feather))
#suppressMessages(library(visNetwork))
#suppressMessages(library(knitr))
suppressMessages(library(DT))

2.2 Adding phantom tools

#In order to get dinamic javascript object install those ones. If you get problems installing go to Stackoverflow.com and type your error to discover what to do. In some cases the libraries need to be intalled in outside R libs.
#devtools::install_github("wch/webshot")
#webshot::install_phantomjs()

2.3 Setting a random seed - this is a good strategy to keep the same graph pattern layout in a new report generation

set.seed(123)

2.4 Simplify Graph - removing loops and duble edges

#acesso<-simplify(acesso) #Simplify

3 Closeness - centrality based on distance to others in the graph

How close an actor to all the other actors in network?

High closeness centrality - short communication path to others, minimal number of steps to reach others.

Answers the “Kevin Bacon” question:

How many steps are required to access every other vertex from a given vertex?

One practical implication of this metric: it helps you gauge how information might spread within your network, and who might be the best people to leverage if you need to make sure information gets around. Link here: http://www.tc.umn.edu/~alink/R-social-network-analysis.html

Closeness centrality can be defined as a measure of how far other nodes are from the node in question. Nodes with high closeness centrality are likely to be relatively efficient in receiving or transmitting information to/from distant parts of the social network.

Scores may be interpreted as arising from a reciprocal process in which the centrality of each actor is proportional to the sum of the centralities of those actors to whom he or she is connected.

In general, vertices with high eigenvector centralities are those which are connected to many other vertices which are, in turn, connected to many others (and so on). (The perceptive may realize that this implies that the largest values will be obtained by individuals in large cliques (or high-density substructures)

3.1 Closeness Non-normalized

3.1.1 Saving to Igraph object

V(acesso)$incloseness <- closeness(acesso, mode = "in", weights = E(acesso)$acesso) %>% round(6)
V(acesso)$outcloseness <- closeness(acesso, mode = "out", weights = E(acesso)$acesso) %>% round(6)
V(acesso)$totalcloseness <- closeness(acesso, mode = "total", weights = E(acesso)$acesso) %>% round(4)

3.1.2 Saving to Environment

acesso_incloseness<- closeness(acesso, mode = "in", weights = E(acesso)$acesso) %>% round(6)
acesso_outcloseness<- closeness(acesso, mode = "out", weights = E(acesso)$acesso) %>% round(6)
acesso_totalcloseness<- closeness(acesso, mode = "total", weights = E(acesso)$acesso) %>% round(6)

3.2 Closeness Non-normalized - IN

summary(acesso_incloseness)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 2.900e-05 6.300e-05 7.100e-05 6.741e-05 7.200e-05 8.900e-05
sd(acesso_incloseness)
## [1] 7.979514e-06

3.2.1 Network Plotting Based On Non-normalized Closeness - IN

V(acesso)$incloseness<-closeness(acesso, weights = E(acesso)$acesso, mode="in")

#Get Variable
V(acesso)$acesso_color_degree<-round(V(acesso)$incloseness,6)

#Creating brewer pallette
vertex_acesso_color_degree<-
  colorRampPalette(brewer.pal(length(unique(
          V(acesso)$acesso_color_degree)), "RdBu"))(
            length(unique(V(acesso)$acesso_color_degree)))

#Saving as Vertex properties 
V(acesso)$vertex_acesso_color_degree<-
  vertex_acesso_color_degree[as.numeric(
  cut(V(acesso)$acesso_color_degree,
      breaks=length(unique(V(acesso)$acesso_color_degree))))]

set.seed(123)
#Plotting based only on degree measures 
edge.start <- ends(acesso, es=E(acesso), names=F)[,1]

# Fixing ego
minC <- rep(-Inf, vcount(acesso))
maxC <- rep(Inf, vcount(acesso))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(acesso, niter=10^4, minx=minC, maxx=maxC,miny=minC, maxy=maxC, weights = E(acesso)$weight)


#PLotting
plot(acesso, 
     layout=co,
     edge.color=V(acesso)$vertex_acesso_color_degree[edge.start],
     edge.arrow.size=closeness(acesso, weights = E(acesso)$acesso, mode="in"),
     edge.width=E(acesso)$weight/mean(E(acesso)$weight),
     edge.curved = TRUE,
     vertex.color=V(acesso)$vertex_acesso_color_degree,
     vertex.size=closeness(acesso, weights = E(acesso)$acesso, mode="in")*10^5,
     vertex.frame.color="black",
     vertex.label.color="black",
     vertex.label=get.vertex.attribute(acesso,"LABEL_COR"),
     vertex.label.cex=(closeness(acesso, weights = E(acesso)$acesso, mode="in")+10^-5)*2000,
     vertex.label.dist=0,
     rescale=F,
     xlim=range(co[,1]), 
     ylim=range(co[,2])
     )
axis(1)
axis(2)


#Solving Problems with legend rendering 
a<-V(acesso)$acesso_color_degree
b<-V(acesso)$vertex_acesso_color_degree
c<-table(a,b)
d<-as.data.frame(c)
e<-subset(d, d$Freq>0)
e<-e[order(e$a,decreasing=T),] 
f<-t(e$a)
g<-t(e$b)

#Adding Legend
legend(x=range(co[,1])[2], 
       y=range(co[,2])[2],
       legend=as.character(f),
       pch=21,
       col = "#777777", 
       pt.bg=as.character(g),
       pt.cex=2,
       bty="n", 
       ncol=1,
       lty=1,
       cex = .3)

#Adding Title
  title("Network Closeness Degree Sized and Colored In - 28_ACESSO", sub = "Source: from authors ")
  text( 
    x=range(co[,1])[1],
    y=range(co[,2])[1], 
      labels = sprintf(
             "Median In Closennes:%.4f\nSD In Closennes: %.5f",
             median(closeness(acesso, mode="in", weights = E(acesso)$acesso)), 
             sd(closeness(acesso, mode="in", weights = E(acesso)$acesso))
             )
       )

3.3 Closeness Non-normalized - OUT

summary(acesso_outcloseness)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 2.900e-05 7.300e-05 9.800e-05 8.704e-05 1.075e-04 1.520e-04
sd(acesso_outcloseness)
## [1] 3.274697e-05

3.3.1 Network Plotting Based On Non-normalized Closeness - OUT

V(acesso)$outcloseness<-closeness(acesso, weights = E(acesso)$acesso, mode="out")

#Get Variable
V(acesso)$acesso_color_degree<-round(V(acesso)$outcloseness,6)

#Creating brewer pallette
vertex_acesso_color_degree<-
  colorRampPalette(brewer.pal(length(unique(
          V(acesso)$acesso_color_degree)), "RdBu"))(
            length(unique(V(acesso)$acesso_color_degree)))

#Saving as Vertex properties 
V(acesso)$vertex_acesso_color_degree<-
  vertex_acesso_color_degree[as.numeric(
  cut(V(acesso)$acesso_color_degree,
      breaks=length(unique(V(acesso)$acesso_color_degree))))]

set.seed(123)
#Plotting based only on degree measures 
edge.start <- ends(acesso, es=E(acesso), names=F)[,1]

# Fixing ego
minC <- rep(-Inf, vcount(acesso))
maxC <- rep(Inf, vcount(acesso))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(acesso, niter=10^4, minx=minC, maxx=maxC,miny=minC, maxy=maxC, weights = E(acesso)$weight)


#PLotting
plot(acesso, 
     layout=co,
     edge.color=V(acesso)$vertex_acesso_color_degree[edge.start],
     edge.arrow.size=closeness(acesso, weights = E(acesso)$acesso, mode="out"),
     edge.width=E(acesso)$weight/2*mean(E(acesso)$weight),
     edge.curved = TRUE,
     vertex.color=V(acesso)$vertex_acesso_color_degree,
     vertex.size=closeness(acesso, weights = E(acesso)$acesso, mode="out")*10^4,
     vertex.frame.color="white",
     vertex.label.color="black",
     vertex.label=get.vertex.attribute(acesso,"LABEL_COR"),
     vertex.label.cex=closeness(acesso, weights = E(acesso)$acesso, mode="out")*200,
     vertex.label.dist=0,
     rescale=F,
     xlim=range(co[,1]), 
     ylim=range(co[,2])
     )
axis(1)
axis(2)


#Solving Problems with legend rendering 
a<-V(acesso)$acesso_color_degree
b<-V(acesso)$vertex_acesso_color_degree
c<-table(a,b)
d<-as.data.frame(c)
e<-subset(d, d$Freq>0)
e<-e[order(e$a,decreasing=T),] 
f<-t(e$a)
g<-t(e$b)

#Adding Legend
legend(x=range(co[,1])[2], 
       y=range(co[,2])[2],
       legend=as.character(f),
       pch=21,
       col = "#777777", 
       pt.bg=as.character(g),
       pt.cex=2,
       bty="n", 
       ncol=1,
       lty=1,
       cex = .3)

#Adding Title
  title("Network Closeness Degree Sized and Colored OUT - 28_ACESSO", sub = "Source: from authors ")
  text( 
    x=range(co[,1])[1],
    y=range(co[,2])[1], 
      labels = sprintf(
             "Median OUT Closennes:%.4f\nSD OUT Closennes: %.5f",
             median(closeness(acesso, mode="out", weights = E(acesso)$acesso)), 
             sd(closeness(acesso, mode="out", weights = E(acesso)$acesso))
             )
       )

3.4 Closeness Non-normalized - ALL

summary(acesso_totalcloseness)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 0.0000700 0.0001100 0.0001220 0.0001206 0.0001310 0.0001880
sd(acesso_totalcloseness)
## [1] 1.972632e-05

3.4.1 Network Plotting Based On Non-normalized Closeness - ALL

V(acesso)$allcloseness<-closeness(acesso, weights = E(acesso)$acesso, mode="all")

#Get Variable
V(acesso)$acesso_color_degree<-round(V(acesso)$allcloseness,6)

#Creating brewer pallette
vertex_acesso_color_degree<-
  colorRampPalette(brewer.pal(length(unique(
          V(acesso)$acesso_color_degree)), "RdBu"))(
            length(unique(V(acesso)$acesso_color_degree)))

#Saving as Vertex properties 
V(acesso)$vertex_acesso_color_degree<-
  vertex_acesso_color_degree[as.numeric(
  cut(V(acesso)$acesso_color_degree,
      breaks=length(unique(V(acesso)$acesso_color_degree))))]

set.seed(123)
#Plotting based only on degree measures 
edge.start <- ends(acesso, es=E(acesso), names=F)[,1]

# Fixing ego
minC <- rep(-Inf, vcount(acesso))
maxC <- rep(Inf, vcount(acesso))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(acesso, niter=10^4, minx=minC, maxx=maxC,miny=minC, maxy=maxC, weights = E(acesso)$weight)


#PLotting
plot(acesso, 
     layout=co,
     edge.color=V(acesso)$vertex_acesso_color_degree[edge.start],
     edge.arrow.size=closeness(acesso, weights = E(acesso)$acesso, mode="all"),
     edge.width=E(acesso)$weight/2*mean(E(acesso)$weight),
     edge.curved = TRUE,
     vertex.color=V(acesso)$vertex_acesso_color_degree,
     vertex.size=closeness(acesso, weights = E(acesso)$acesso, mode="all")*10^4,
     vertex.frame.color="white",
     vertex.label.color="black",
     vertex.label=get.vertex.attribute(acesso,"LABEL_COR"),
     vertex.label.cex=(closeness(acesso, weights = E(acesso)$acesso, mode="all")+0.00001)*200,
     vertex.label.dist=0,
     rescale=F,
     xlim=range(co[,1]), 
     ylim=range(co[,2])
     )
axis(1)
axis(2)


#Solving Problems with legend rendering 
a<-V(acesso)$acesso_color_degree
b<-V(acesso)$vertex_acesso_color_degree
c<-table(a,b)
d<-as.data.frame(c)
e<-subset(d, d$Freq>0)
e<-e[order(e$a,decreasing=T),] 
f<-t(e$a)
g<-t(e$b)

#Adding Legend
legend(x=range(co[,1])[2], 
       y=range(co[,2])[2],
       legend=as.character(f),
       pch=21,
       col = "#777777", 
       pt.bg=as.character(g),
       pt.cex=2,
       bty="n", 
       ncol=1,
       lty=1,
       cex = .3)

#Adding Title
  title("Network Closeness Degree Sized and Colored all - 28_ACESSO", sub = "Source: from authors ")
  text( 
    x=range(co[,1])[1],
    y=range(co[,2])[1], 
      labels = sprintf(
             "Median all Closennes:%.4f\nSD all Closennes: %.5f",
             median(closeness(acesso, mode="all", weights = E(acesso)$acesso)), 
             sd(closeness(acesso, mode="all", weights = E(acesso)$acesso))
             )
       )

3.5 Closeness Normalized

3.5.1 Saving to Igraph object

V(acesso)$incloseness_n <- closeness(acesso, mode = "in",, weights = E(acesso)$acesso, normalized = T) %>% round(10)
V(acesso)$outcloseness_n <- closeness(acesso, mode = "out", normalized = T, weights = E(acesso)$acesso) %>% round(6)
V(acesso)$totalcloseness_n <- closeness(acesso, mode = "total", normalized = T, weights = E(acesso)$acesso) %>% round(6)

3.5.2 Saving to Environment

acesso_incloseness_n<- closeness(acesso, mode = "in", normalized = T, weights = E(acesso)$acesso) %>% round(6)
acesso_outcloseness_n<- closeness(acesso, mode = "out", normalized = T, weights = E(acesso)$acesso) %>% round(6)
acesso_totalcloseness_n<- closeness(acesso, mode = "total", normalized = T, weights = E(acesso)$acesso) %>% round(6)

3.5.3 Closeness Normalized - IN

summary(acesso_incloseness_n)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.005348 0.011750 0.013170 0.012540 0.013440 0.016480
sd(acesso_incloseness_n)
## [1] 0.001477409

3.6 Network Plotting Based On Normalized Closeness - IN

V(acesso)$incloseness_n<-closeness(acesso, weights = E(acesso)$acesso, mode="in", normalized = T)

#Get Variable
V(acesso)$acesso_color_degree<-round(V(acesso)$incloseness_n,6)

#Creating brewer pallette
vertex_acesso_color_degree<-
  colorRampPalette(brewer.pal(length(unique(
          V(acesso)$acesso_color_degree)), "RdBu"))(
            length(unique(V(acesso)$acesso_color_degree)))

#Saving as Vertex properties 
V(acesso)$vertex_acesso_color_degree<-
  vertex_acesso_color_degree[as.numeric(
  cut(V(acesso)$acesso_color_degree,
      breaks=length(unique(V(acesso)$acesso_color_degree))))]

set.seed(123)
#Plotting based only on degree measures 
edge.start <- ends(acesso, es=E(acesso), names=F)[,1]

# Fixing ego
minC <- rep(-Inf, vcount(acesso))
maxC <- rep(Inf, vcount(acesso))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(acesso, niter=10^4, minx=minC, maxx=maxC,miny=minC, maxy=maxC, weights = E(acesso)$weight)


#PLotting
plot(acesso, 
     layout=co,
     edge.color=V(acesso)$vertex_acesso_color_degree[edge.start],
     edge.arrow.size=closeness(acesso, weights = E(acesso)$acesso, mode="in",normalized = T),
     edge.width=E(acesso)$weight/10*mean(E(acesso)$weight),
     edge.curved = TRUE,
     vertex.color=V(acesso)$vertex_acesso_color_degree,
     vertex.size=(closeness(acesso, weights = E(acesso)$acesso, mode="in",normalized = T))*1000,
     vertex.frame.color="black",
     vertex.label.color="black",
     vertex.label=get.vertex.attribute(acesso,"LABEL_COR"),
     vertex.label.cex=closeness(acesso, weights = E(acesso)$acesso, mode="in",normalized = T)*10,
     vertex.label.dist=0,
     rescale=F,
     xlim=range(co[,1]), 
     ylim=range(co[,2])
     )
axis(1)
axis(2)


#Solving Problems with legend rendering 
a<-V(acesso)$acesso_color_degree
b<-V(acesso)$vertex_acesso_color_degree
c<-table(a,b)
d<-as.data.frame(c)
e<-subset(d, d$Freq>0)
e<-e[order(e$a,decreasing=T),] 
f<-t(e$a)
g<-t(e$b)

#Adding Legend
legend(x=range(co[,1])[2], 
       y=range(co[,2])[2],
       legend=as.character(f),
       pch=21,
       col = "#777777", 
       pt.bg=as.character(g),
       pt.cex=2,
       bty="n", 
       ncol=1,
       lty=1,
       cex = .3)

#Adding Title
  title("Network Closeness Degree Sized Normalized In - 28_ACESSO", sub = "Source: from authors ")
  text( 
    x=range(co[,1])[1],
    y=range(co[,2])[1], 
      labels = sprintf(
             "Median In Closennes:%.4f\nSD In Closennes: %.5f",
             median(closeness(acesso, mode="in", weights = E(acesso)$acesso, normalized = T)), 
             sd(closeness(acesso, mode="in", weights = E(acesso)$acesso, normalized = T))
             )
       )

###Closeness Normalized - OUT

summary(acesso_outcloseness_n)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.005348 0.013610 0.018280 0.016190 0.020000 0.028220
sd(acesso_outcloseness_n)
## [1] 0.006111667

3.7 Network Plotting Based On Normalized Closeness - OUT

V(acesso)$outcloseness_n<-closeness(acesso, weights = E(acesso)$acesso, mode="out", normalized = T)

#Get Variable
V(acesso)$acesso_color_degree<-round(V(acesso)$outcloseness_n,6)

#Creating brewer pallette
vertex_acesso_color_degree<-
  colorRampPalette(brewer.pal(length(unique(
          V(acesso)$acesso_color_degree)), "RdBu"))(
            length(unique(V(acesso)$acesso_color_degree)))

#Saving as Vertex properties 
V(acesso)$vertex_acesso_color_degree<-
  vertex_acesso_color_degree[as.numeric(
  cut(V(acesso)$acesso_color_degree,
      breaks=length(unique(V(acesso)$acesso_color_degree))))]

set.seed(123)
#Plotting based only on degree measures 
edge.start <- ends(acesso, es=E(acesso), names=F)[,1]

# Fixing ego
minC <- rep(-Inf, vcount(acesso))
maxC <- rep(Inf, vcount(acesso))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(acesso, niter=10^4, minx=minC, maxx=maxC,miny=minC, maxy=maxC, weights = E(acesso)$weight)


#PLotting
plot(acesso, 
     layout=co,
     edge.color=V(acesso)$vertex_acesso_color_degree[edge.start],
     edge.arrow.size=closeness(acesso, weights = E(acesso)$acesso, mode="out",normalized = T),
     edge.width=E(acesso)$weight/10*mean(E(acesso)$weight),
     edge.curved = TRUE,
     vertex.color=V(acesso)$vertex_acesso_color_degree,
     vertex.size=(closeness(acesso, weights = E(acesso)$acesso, mode="out",normalized = T))*100,
     vertex.frame.color="black",
     vertex.label.color="black",
     vertex.label=get.vertex.attribute(acesso,"LABEL_COR"),
     vertex.label.cex=closeness(acesso, weights = E(acesso)$acesso, mode="out",normalized = T)*1.5,
     vertex.label.dist=0,
     rescale=F,
     xlim=range(co[,1]), 
     ylim=range(co[,2])
     )
axis(1)
axis(2)


#Solving Problems with legend rendering 
a<-V(acesso)$acesso_color_degree
b<-V(acesso)$vertex_acesso_color_degree
c<-table(a,b)
d<-as.data.frame(c)
e<-subset(d, d$Freq>0)
e<-e[order(e$a,decreasing=T),] 
f<-t(e$a)
g<-t(e$b)

#Adding Legend
legend(x=range(co[,1])[2], 
       y=range(co[,2])[2],
       legend=as.character(f),
       pch=21,
       col = "#777777", 
       pt.bg=as.character(g),
       pt.cex=2,
       bty="n", 
       ncol=1,
       lty=1,
       cex = .3)

#Adding Title
  title("Network Closeness Degree Sized Normalized OUT - 28_ACESSO", sub = "Source: from authors ")
  text( 
    x=range(co[,1])[1],
    y=range(co[,2])[1], 
      labels = sprintf(
             "Median OUT Closennes:%.4f\nSD OUT Closennes: %.5f",
             median(closeness(acesso, mode="out", weights = E(acesso)$acesso, normalized = T)), 
             sd(closeness(acesso, mode="out", weights = E(acesso)$acesso, normalized = T))
             )
       )

3.7.1 Closeness Normalized - ALL

summary(acesso_totalcloseness_n)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01300 0.02043 0.02264 0.02242 0.02432 0.03500
sd(acesso_totalcloseness_n)
## [1] 0.003672963

3.8 Network Plotting Based On Normalized Closeness - ALL

V(acesso)$allcloseness_n<-closeness(acesso, weights = E(acesso)$acesso, mode="all", normalized = T)

#Get Variable
V(acesso)$acesso_color_degree<-round(V(acesso)$allcloseness_n,6)

#Creating brewer pallette
vertex_acesso_color_degree<-
  colorRampPalette(brewer.pal(length(unique(
          V(acesso)$acesso_color_degree)), "RdBu"))(
            length(unique(V(acesso)$acesso_color_degree)))

#Saving as Vertex properties 
V(acesso)$vertex_acesso_color_degree<-
  vertex_acesso_color_degree[as.numeric(
  cut(V(acesso)$acesso_color_degree,
      breaks=length(unique(V(acesso)$acesso_color_degree))))]

set.seed(123)
#Plotting based only on degree measures 
edge.start <- ends(acesso, es=E(acesso), names=F)[,1]

# Fixing ego
minC <- rep(-Inf, vcount(acesso))
maxC <- rep(Inf, vcount(acesso))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(acesso, niter=10^4, minx=minC, maxx=maxC,miny=minC, maxy=maxC, weights = E(acesso)$weight)


#PLotting
plot(acesso, 
     layout=co,
     edge.color=V(acesso)$vertex_acesso_color_degree[edge.start],
     edge.arrow.size=closeness(acesso, weights = E(acesso)$acesso, mode="all",normalized = T),
     edge.width=E(acesso)$weight/10*mean(E(acesso)$weight),
     edge.curved = TRUE,
     vertex.color=V(acesso)$vertex_acesso_color_degree,
     vertex.size=(closeness(acesso, weights = E(acesso)$acesso, mode="all",normalized = T))*100,
     vertex.frame.color="black",
     vertex.label.color="black",
     vertex.label=get.vertex.attribute(acesso,"LABEL_COR"),
     vertex.label.cex=closeness(acesso, weights = E(acesso)$acesso, mode="all",normalized = T)*1.5,
     vertex.label.dist=0,
     rescale=F,
     xlim=range(co[,1]), 
     ylim=range(co[,2])
     )
axis(1)
axis(2)


#Solving Problems with legend rendering 
a<-V(acesso)$acesso_color_degree
b<-V(acesso)$vertex_acesso_color_degree
c<-table(a,b)
d<-as.data.frame(c)
e<-subset(d, d$Freq>0)
e<-e[order(e$a,decreasing=T),] 
f<-t(e$a)
g<-t(e$b)

#Adding Legend
legend(x=range(co[,1])[2], 
       y=range(co[,2])[2],
       legend=as.character(f),
       pch=21,
       col = "#777777", 
       pt.bg=as.character(g),
       pt.cex=2,
       bty="n", 
       ncol=1,
       lty=1,
       cex = .3)

#Adding Title
  title("Network Closeness Degree Sized Normalized ALL - 28_ACESSO", sub = "Source: from authors ")
  text( 
    x=range(co[,1])[1],
    y=range(co[,2])[1], 
      labels = sprintf(
             "Median ALL Closennes:%.4f\nSD ALL Closennes: %.5f",
             median(closeness(acesso, mode="all", weights = E(acesso)$acesso, normalized = T)), 
             sd(closeness(acesso, mode="all", weights = E(acesso)$acesso, normalized = T))
             )
       )

3.9 Closeness Normalized

3.9.1 Saving to Igraph object

V(acesso)$incloseness_n <- closeness(acesso, weights = E(acesso)$acesso, mode = "in", normalized = T) %>% round(6)
V(acesso)$outcloseness_n <- closeness(acesso, weights = E(acesso)$acesso, mode = "out", normalized = T) %>% round(6)
V(acesso)$totalcloseness_n <- closeness(acesso, weights = E(acesso)$acesso, mode = "total", normalized = T) %>% round(6)

3.10 Centralization Closseness

V(acesso)$acesso_centr_closeness<- centralization.closeness(acesso)$res
acesso_centr_closeness<- centralization.closeness(acesso)$res
acesso_centr_closeness_all<- centralization.closeness(acesso)

3.10.1 Centralization

acesso_centr_closeness_all$centralization
## [1] 0.1627615

3.10.2 Theoretical Max

acesso_centr_closeness_all$theoretical_max
## [1] 185.0053

3.11 Network Plotting Based On Centralization Closeness

V(acesso)$acesso_centr_closeness<- centralization.closeness(acesso)$res

#Get Variable
V(acesso)$acesso_color_degree<-round(V(acesso)$acesso_centr_closeness,6)

#Creating brewer pallette
vertex_acesso_color_degree<-
  colorRampPalette(brewer.pal(length(unique(
          V(acesso)$acesso_color_degree)), "Spectral"))(
            length(unique(V(acesso)$acesso_color_degree)))

#Saving as Vertex properties 
V(acesso)$vertex_acesso_color_degree<-
  vertex_acesso_color_degree[as.numeric(
  cut(V(acesso)$acesso_color_degree,
      breaks=length(unique(V(acesso)$acesso_color_degree))))]

set.seed(123)
#Plotting based only on degree measures 
edge.start <- ends(acesso, es=E(acesso), names=F)[,1]

# Fixing ego
minC <- rep(-Inf, vcount(acesso))
maxC <- rep(Inf, vcount(acesso))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(acesso, niter=10^4, minx=minC, maxx=maxC,miny=minC, maxy=maxC, weights = E(acesso)$weight)


#PLotting
plot(acesso, 
     layout=co,
     edge.color=V(acesso)$vertex_acesso_color_degree[edge.start],
     edge.arrow.size=centralization.closeness(acesso)$res,
     edge.width=E(acesso)$weight/10*mean(E(acesso)$weight),
     edge.curved = TRUE,
     vertex.color=V(acesso)$vertex_acesso_color_degree,
     vertex.size=centralization.closeness(acesso)$res*100,
     vertex.frame.color="black",
     vertex.label.color="black",
     vertex.label=get.vertex.attribute(acesso,"LABEL_COR"),
     vertex.label.cex=centralization.closeness(acesso)$res,
     vertex.label.dist=0,
     rescale=F,
     xlim=range(co[,1]), 
     ylim=range(co[,2])
     )
axis(1)
axis(2)


#Solving Problems with legend rendering 
a<-V(acesso)$acesso_color_degree
b<-V(acesso)$vertex_acesso_color_degree
c<-table(a,b)
d<-as.data.frame(c)
e<-subset(d, d$Freq>0)
e<-e[order(e$a,decreasing=T),] 
f<-t(e$a)
g<-t(e$b)

#Adding Legend
legend(x=range(co[,1])[2], 
       y=range(co[,2])[2],
       legend=as.character(f),
       pch=21,
       col = "#777777", 
       pt.bg=as.character(g),
       pt.cex=2,
       bty="n", 
       ncol=1,
       lty=1,
       cex = .3)

#Adding Title
  title("Network Centralization Closeness - 28_ACESSO", sub = "Source: from authors ")
  text( 
    x=range(co[,1])[1],
    y=range(co[,2])[1], 
      labels = sprintf(
             "Median Centralization Closeness:%.4f\nSD Centralization Closeness: %.5f",
             median(centralization.closeness(acesso)$res), 
             sd(centralization.closeness(acesso)$res)
             )
       )

4 Closeness Dinamic Table

4.1 Getting Closeness Measures

acesso_incloseness<- closeness(acesso, weights = E(acesso)$acesso, mode = "in") %>% round(6)
acesso_outcloseness<- closeness(acesso, weights = E(acesso)$acesso, mode = "out") %>% round(6)
acesso_totalcloseness<- closeness(acesso, weights = E(acesso)$acesso, mode = "total") %>% round(6)
acesso_incloseness_n<- closeness(acesso,weights = E(acesso)$acesso, mode = "in", normalized = T) %>% round(6)
acesso_outcloseness_n<- closeness(acesso,weights = E(acesso)$acesso, mode = "out", normalized = T) %>% round(6)
acesso_totalcloseness_n<- closeness(acesso,weights = E(acesso)$acesso, mode = "total", normalized = T) %>% round(6)
acesso_centr_closeness <- centralization.closeness(acesso)$res %>% round(6)

4.2 Creating a datagrame of measures

acesso_df_closseness <- data.frame(
acesso_incloseness,
acesso_outcloseness,
acesso_totalcloseness,
acesso_incloseness_n,
acesso_outcloseness_n,
acesso_totalcloseness_n,
acesso_centr_closeness) %>% round(6)

#Adding type
acesso_df_closseness <-cbind(acesso_df_closseness, V(acesso)$LABEL_COR)

#Adding names
names(acesso_df_closseness) <- c("In Closeness", "Out Closeness", "Total Closeness","In Closeness Normalized", "Out Closeness Normalized", "Total Closeness Normalized","Centralization Closeness","Type")

#Ordering Variables
acesso_df_closseness<-acesso_df_closseness[c("Type","In Closeness", "Out Closeness", "Total Closeness","In Closeness Normalized", "Out Closeness Normalized","Total Closeness Normalized", "Centralization Closeness")]

4.3 General tabel - DT

datatable(acesso_df_closseness, filter = 'top')

4.4 Aggregating data from previous table - mean

aggdata_mean <-aggregate(acesso_df_closseness, by=list(acesso_df_closseness$Type), FUN=mean, na.rm=TRUE)

names(aggdata_mean) <- c("Group","Type","In Closeness(M)", "Out Closeness(M)", "Total Closeness(M)","In Closeness Normalized(M)", "Out Closeness Normalized(M)", "Total Closeness Normalized(M)","Centralization Closeness(M)")
  
#Removing Type variable
aggdata_mean<-aggdata_mean[,-c(2)]

4.5 Aggregating data from previous table - sd

aggdata_sd <-aggregate(acesso_df_closseness, by=list(acesso_df_closseness$Type), FUN=sd, na.rm=TRUE) 

names(aggdata_sd) <- c("Group","Type","In Closeness(SD)", "Out Closeness(SD)", "Total Closeness(SD)","In Closeness Normalized(SD)", "Out Closeness Normalized(SD)", "Total Closeness Normalized(SD)", "Centralization Closeness(SD)")

#Removing Type variable
aggdata_sd<-aggdata_sd[,-c(2)]

#Merging mean and standart deviation
total_table <- merge(aggdata_mean,aggdata_sd,by="Group")

#Rounding
Group<-total_table[,c(1)] #Keeping group
total_table<-total_table[,-c(1)] %>% round(6) #Rouding
total_table<-cbind(Group,total_table) #Binding toghter

#Organizing Variabels
total_table<-total_table[c("Group","In Closeness(M)", "In Closeness(SD)", "Out Closeness(M)", "Out Closeness(SD)", "Total Closeness(M)","Total Closeness(SD)","In Closeness Normalized(M)", "In Closeness Normalized(SD)", "Out Closeness Normalized(M)", "Out Closeness Normalized(SD)", "Total Closeness Normalized(M)","Total Closeness Normalized(SD)", "Centralization Closeness(M)","Centralization Closeness(SD)")]

4.6 Plotting final table with round for Closseness

datatable(total_table, filter = 'top')

4.7 Creating a datagrame of measures (Natureza Governamental)

acesso_df_closseness <- data.frame(
acesso_incloseness,
acesso_outcloseness,
acesso_totalcloseness,
acesso_incloseness_n,
acesso_outcloseness_n,
acesso_totalcloseness_n,
acesso_centr_closeness) %>% round(6)

#Adding type
acesso_df_closseness <-cbind(acesso_df_closseness, V(acesso)$TIPO1)

#Adding names
names(acesso_df_closseness) <- c("In Closeness", "Out Closeness", "Total Closeness","In Closeness Normalized", "Out Closeness Normalized", "Total Closeness Normalized","Centralization Closeness","Type")

#Ordering Variables
acesso_df_closseness<-acesso_df_closseness[c("Type","In Closeness", "Out Closeness", "Total Closeness","In Closeness Normalized", "Out Closeness Normalized","Total Closeness Normalized", "Centralization Closeness")]

4.8 General tabel - DT

datatable(acesso_df_closseness, filter = 'top')

4.9 Aggregating data from previous table - mean

aggdata_mean <-aggregate(acesso_df_closseness, by=list(acesso_df_closseness$Type), FUN=mean, na.rm=TRUE)

names(aggdata_mean) <- c("Group","Type","In Closeness(M)", "Out Closeness(M)", "Total Closeness(M)","In Closeness Normalized(M)", "Out Closeness Normalized(M)", "Total Closeness Normalized(M)","Centralization Closeness(M)")
  
#Removing Type variable
aggdata_mean<-aggdata_mean[,-c(2)]

4.10 Aggregating data from previous table - sd

aggdata_sd <-aggregate(acesso_df_closseness, by=list(acesso_df_closseness$Type), FUN=sd, na.rm=TRUE) 

names(aggdata_sd) <- c("Group","Type","In Closeness(SD)", "Out Closeness(SD)", "Total Closeness(SD)","In Closeness Normalized(SD)", "Out Closeness Normalized(SD)", "Total Closeness Normalized(SD)", "Centralization Closeness(SD)")

#Removing Type variable
aggdata_sd<-aggdata_sd[,-c(2)]

#Merging mean and standart deviation
total_table <- merge(aggdata_mean,aggdata_sd,by="Group")

#Rounding
Group<-total_table[,c(1)] #Keeping group
total_table<-total_table[,-c(1)] %>% round(6) #Rouding
total_table<-cbind(Group,total_table) #Binding toghter

#Organizing Variabels
total_table<-total_table[c("Group","In Closeness(M)", "In Closeness(SD)", "Out Closeness(M)", "Out Closeness(SD)", "Total Closeness(M)","Total Closeness(SD)","In Closeness Normalized(M)", "In Closeness Normalized(SD)", "Out Closeness Normalized(M)", "Out Closeness Normalized(SD)", "Total Closeness Normalized(M)","Total Closeness Normalized(SD)", "Centralization Closeness(M)","Centralization Closeness(SD)")]

4.11 Plotting final table with round for Closseness

datatable(total_table, filter = 'top')

4.12 Creating a datagrame of measures (Setores)

acesso_df_closseness <- data.frame(
acesso_incloseness,
acesso_outcloseness,
acesso_totalcloseness,
acesso_incloseness_n,
acesso_outcloseness_n,
acesso_totalcloseness_n,
acesso_centr_closeness) %>% round(6)

#Adding type
acesso_df_closseness <-cbind(acesso_df_closseness, V(acesso)$TIPO2)

#Adding names
names(acesso_df_closseness) <- c("In Closeness", "Out Closeness", "Total Closeness","In Closeness Normalized", "Out Closeness Normalized", "Total Closeness Normalized","Centralization Closeness","Type")

#Ordering Variables
acesso_df_closseness<-acesso_df_closseness[c("Type","In Closeness", "Out Closeness", "Total Closeness","In Closeness Normalized", "Out Closeness Normalized","Total Closeness Normalized", "Centralization Closeness")]

4.13 General tabel - DT

datatable(acesso_df_closseness, filter = 'top')

4.14 Aggregating data from previous table - mean

aggdata_mean <-aggregate(acesso_df_closseness, by=list(acesso_df_closseness$Type), FUN=mean, na.rm=TRUE)

names(aggdata_mean) <- c("Group","Type","In Closeness(M)", "Out Closeness(M)", "Total Closeness(M)","In Closeness Normalized(M)", "Out Closeness Normalized(M)", "Total Closeness Normalized(M)","Centralization Closeness(M)")
  
#Removing Type variable
aggdata_mean<-aggdata_mean[,-c(2)]

4.15 Aggregating data from previous table - sd

aggdata_sd <-aggregate(acesso_df_closseness, by=list(acesso_df_closseness$Type), FUN=sd, na.rm=TRUE) 

names(aggdata_sd) <- c("Group","Type","In Closeness(SD)", "Out Closeness(SD)", "Total Closeness(SD)","In Closeness Normalized(SD)", "Out Closeness Normalized(SD)", "Total Closeness Normalized(SD)", "Centralization Closeness(SD)")

#Removing Type variable
aggdata_sd<-aggdata_sd[,-c(2)]

#Merging mean and standart deviation
total_table <- merge(aggdata_mean,aggdata_sd,by="Group")

#Rounding
Group<-total_table[,c(1)] #Keeping group
total_table<-total_table[,-c(1)] %>% round(6) #Rouding
total_table<-cbind(Group,total_table) #Binding toghter

#Organizing Variabels
total_table<-total_table[c("Group","In Closeness(M)", "In Closeness(SD)", "Out Closeness(M)", "Out Closeness(SD)", "Total Closeness(M)","Total Closeness(SD)","In Closeness Normalized(M)", "In Closeness Normalized(SD)", "Out Closeness Normalized(M)", "Out Closeness Normalized(SD)", "Total Closeness Normalized(M)","Total Closeness Normalized(SD)", "Centralization Closeness(M)","Centralization Closeness(SD)")]

4.16 Plotting final table with round for Closseness

datatable(total_table, filter = 'top')

5 Saving objects with new variables and changes

save.image("~/SNArRDJF/Robject/acesso_data.RData")